﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using s2b.ControleDesenvolvimentoProjetos.Dados.OBJ;
using s2b.ControleDesenvolvimentoProjetos.Util.Auxiliar;
using System.Data.SqlClient;

namespace s2b.ControleDesenvolvimentoProjetos.UserControls
{
    public partial class WUCFeedback : System.Web.UI.UserControl
    {
        List<Tarefa> tarefas;
  


        protected void Page_Load(object sender, EventArgs e)
        {
    
            if (!IsPostBack)
            {
                tarefas = new List<Tarefa>();
                Session["Tarefas"] = tarefas;
          

                    Table tblAdicionaFeedbacks = new Table();
                TableRow rowTitulo = new TableRow();
                TableCell cellTituloCliente = new TableCell();
                cellTituloCliente.Text = "Cliente";
                TableCell cellTituloProjeto = new TableCell();
                cellTituloProjeto.Text = "Projeto";
                TableCell cellTituloTarefa = new TableCell();
                cellTituloTarefa.Text = "Tarefa";
                TableCell cellTituloFeedback = new TableCell();
                cellTituloFeedback.Text = "Feedback";
                TableCell cellTituloRemover = new TableCell();
                cellTituloFeedback.Text = "Remover";
                rowTitulo.Controls.Add(cellTituloCliente);
                rowTitulo.Controls.Add(cellTituloProjeto);
                rowTitulo.Controls.Add(cellTituloTarefa);
                rowTitulo.Controls.Add(cellTituloFeedback);
                rowTitulo.Controls.Add(cellTituloRemover);
                tblAdicionaFeedbacks.Controls.Add(rowTitulo);
                //ViewState.Add("Tarefas", tarefas);
                Session["Feedbacks"] = null;
                Session["Feedbacks"] = tblAdicionaFeedbacks;
                CarregaClientes();
                txtData.Text = DateTime.Now.ToString("dd/MM/yyyy");
                for (int i = 0; i < 24; i++)
                {
                    ddlHoraEntrada.Items.Add((String.Format("{0:D2}", i)));
                    ddlHoraSaida.Items.Add((String.Format("{0:D2}", i)));
                }

                //for (int i = 0; i < 60; i++)
                //{
                //    ddlMinutoEntrada.Items.Add((String.Format("{0:D2}", i)));
                //    ddlMinutoSaida.Items.Add((String.Format("{0:D2}", i)));
                //}
            }
            else
            {


            }
        }
        public void CarregaProjeto()
        {

            ddlProjeto.Items.Clear();
            ddlTarefa.Items.Clear();

            List<Projeto> projetos = new List<Projeto>();


            SqlDataReader executa = Auxiliar.RetornaRegistros(String.Format("SELECT * FROM {0} WHERE {1} = {2}", Projeto.Tabela, Projeto.IdCliente, ddlCliente.SelectedValue), Projeto.Tabela);

            if (executa != null)
            {


                while (executa.Read())
                {
                    Projeto projeto = new Projeto();

                    projeto.Id_projeto = Convert.ToInt32(executa[Projeto.Id]);
                    projeto.Nome_projeto = executa[Projeto.Nome].ToString();

                    projetos.Add(projeto);
                }

                if (projetos.Count > 0)

                    ddlProjeto.Items.Add(new ListItem() { Text = "Selecione" });
                Auxiliar.FecharConexao();
                foreach (Projeto projetoX in projetos)
                {
                    ddlProjeto.Items.Add(new ListItem() { Text = projetoX.Nome_projeto, Value = projetoX.Id_projeto.ToString() });
                }

            }
        }
        public void CarregaTarefa()
        {
            ddlTarefa.Items.Clear();

            List<Tarefa> tarefas = new List<Tarefa>();


            SqlDataReader executa = Auxiliar.RetornaRegistros(String.Format("SELECT * FROM TAREFAS WHERE ID_PROJETO = {0}", ddlProjeto.SelectedValue), "TAREFAS");
            if (executa != null)
            {




                while (executa.Read())
                {
                    Tarefa tarefa = new Tarefa();

                    tarefa.Id_tarefa = Convert.ToInt32(executa[Tarefa.Id]);
                    tarefa.Nome_tarefa = executa[Tarefa.Nome].ToString();

                    tarefas.Add(tarefa);
                }
                if (tarefas.Count > 0)
                    ddlTarefa.Items.Add(new ListItem() { Text = "Selecione" });
                Auxiliar.FecharConexao();


                foreach (Tarefa tarefaX in tarefas)
                {

                    ddlTarefa.Items.Add(new ListItem() { Text = tarefaX.Nome_tarefa, Value = tarefaX.Id_tarefa.ToString() });
                }
            }


        }
        public void CarregaClientes()
        {
            ddlCliente.Items.Clear();
            ddlProjeto.Items.Clear();
            ddlTarefa.Items.Clear();

            List<Cliente> clientes = new List<Cliente>();


            SqlDataReader executa = Auxiliar.RetornaRegistros("SELECT * FROM CLIENTE", "CLIENTE");
            if (executa != null)
            {


                while (executa.Read())
                {
                    Cliente cliente = new Cliente();
                    cliente.Id_Cliente = Convert.ToInt32(executa["ID_CLIENTE"]);
                    cliente.Razao_social = executa["RAZAO_SOCIAL"].ToString();
                    clientes.Add(cliente);
                }
                if (clientes.Count > 0)
                    ddlCliente.Items.Add(new ListItem() { Text = "Selecione" });
                Auxiliar.FecharConexao();
                foreach (Cliente clienteX in clientes)
                {
                    ddlCliente.Items.Add(new ListItem() { Text = clienteX.Razao_social, Value = clienteX.Id_Cliente.ToString() });
                }
            }

        }
        protected void btnAdicionar_Click(object sender, EventArgs e)
        {
            if (Session["Tarefas"] != null)
            {
                
                tarefas = (List<Tarefa>)Session["Tarefas"];
            }
            Tarefa tarefa = new Tarefa();


            double hrs = (Convert.ToInt32(ddlHoraSaida.Text) - Convert.ToInt32(ddlHoraEntrada.Text)) * 60;
          //  double min = Convert.ToInt32(ddlMinutoSaida.Text) - Convert.ToInt32(ddlMinutoEntrada.Text);
            //banco
            double cargaHoraria = 0.0;
            double cargaHorariaUtilizada = 0.0;
            double porcAtual = Convert.ToDouble(txtConcluido.Text);
            double porcAnterior = 0.0;
            double cargaHorariaUtilizadaAnterior = 0.0;
            string nomeTarefa = string.Empty;
            //conta


            
            SqlDataReader executa = Auxiliar.RetornaRegistros(String.Format("SELECT * FROM {0} WHERE {1} = {2}", Tarefa.Tabela, Tarefa.Id, ddlTarefa.SelectedValue), Tarefa.Tabela);
            if (executa != null)
            {
                while (executa.Read())
                {

                    cargaHoraria = Math.Round(Convert.ToDouble(executa[Tarefa.CargaHorariaTarefa]), 2) * 60.0;
                    
                    cargaHorariaUtilizadaAnterior = Math.Round(Convert.ToDouble(executa[Tarefa.CargaHorariaUtilizada]), 2) * 60.0;
                    porcAnterior = Math.Round(Convert.ToDouble(executa[Tarefa.Porcentagem]), 2);
                    nomeTarefa = executa[Tarefa.Nome].ToString();
                    //porcAtual = Convert.ToDouble(executa[Tarefa.Porcentagem]);
                }
            }
            //form
            cargaHorariaUtilizada = cargaHorariaUtilizadaAnterior + Math.Round(Convert.ToDouble(hrs),2);
            double porcNecessarria = Math.Round(((100.0 / cargaHoraria) * cargaHorariaUtilizada) <= 100.0 ? ((100.0 / cargaHoraria) * cargaHorariaUtilizada) : 100.0,2);


            int status = 1;


            if (100 == porcAtual)

                status = (int)Enums.Status.Concluido;

            else
                if (Convert.ToInt32(porcNecessarria) == Convert.ToInt32(porcAtual))

                    status = (int)Enums.Status.EmDia;
                else
                    if (Convert.ToInt32(porcNecessarria) < Convert.ToInt32(porcAtual))
                        status = (int)Enums.Status.Adiantado;
                    else
                        if (Convert.ToInt32(porcNecessarria) > Convert.ToInt32(porcAtual))
                            status = (int)Enums.Status.Atrasado;


            

            tarefa.Carg_hor_utiliz_tarefa = ((cargaHorariaUtilizada - cargaHorariaUtilizadaAnterior) / 60);
            tarefa.Carga_horaria_Tarefa = (cargaHoraria / 60);
            tarefa.Porc_conclusao = porcAtual;
            tarefa.Porc_necessaria = porcNecessarria;
            tarefa.Id_status = status;
            tarefa.Id_tarefa = Convert.ToInt32(ddlTarefa.SelectedValue);
            tarefa.Id_projeto = Convert.ToInt32(ddlProjeto.SelectedValue);
            tarefa.Id_Cliente = Convert.ToInt32(ddlCliente.SelectedValue);
            tarefa.PorcentagemAnterior = porcAnterior;
            tarefa.Feedback = txtFeedback.Text;
            tarefa.Nome_tarefa = nomeTarefa;
            string feedback;
            if (ckbFeedback.Checked)
            {
                feedback = "POSITIVO";

            }
            else
            {
                feedback = "NEGATIVO";
            }
            tarefa.FeedbackPositivoNegativo = feedback;
            tarefas.Add(tarefa);
            Session["Tarefa"] = tarefas;
            CalculaStatusTarefa();



            #region
            //            Literal lt = new Literal();

//            StringBuilder table = new StringBuilder();

//            table.Append(@"<table width='100%'>
//           <tr>
//           <th>Entrada</th>
//           <th>Saida</th>
//           <th>Cliente</th>
//            <th>Projeto</th>
//           <th>Descrição</th>
//           <th></th>
//           </tr>");



//            table.Append("</table>");

//            lt.Text = table.ToString();
            //            pnlTarefas.Controls.Add(lt);
            #endregion
        }

        public void TabelaAdicionar() {
            if (Session["Tarefas"] != null)
            {

                tarefas = (List<Tarefa>)Session["Tarefas"];



                Table tblAdicionaFeedbacks = new Table();
                TableRow rowTitulo = new TableRow();
                TableCell cellTituloCliente = new TableCell();
                cellTituloCliente.Text = "Cliente";
                TableCell cellTituloProjeto = new TableCell();
                cellTituloProjeto.Text = "Projeto";
                TableCell cellTituloTarefa = new TableCell();
                cellTituloTarefa.Text = "Tarefa";
                TableCell cellTituloFeedback = new TableCell();
                cellTituloFeedback.Text = "Feedback";
                TableCell cellTituloRemover = new TableCell();
                cellTituloFeedback.Text = "Remover";
                rowTitulo.Controls.Add(cellTituloCliente);
                rowTitulo.Controls.Add(cellTituloProjeto);
                rowTitulo.Controls.Add(cellTituloTarefa);
                rowTitulo.Controls.Add(cellTituloFeedback);
                rowTitulo.Controls.Add(cellTituloRemover);
                tblAdicionaFeedbacks.Controls.Add(rowTitulo);

                foreach (Tarefa tarefa in tarefas)
                {
                    
            TableRow rowFeedback = new TableRow();
            TableCell cellFeedbackCliente = new TableCell();
          SqlDataReader  executa = Auxiliar.RetornaRegistros(String.Format("SELECT * FROM {0} WHERE {1} = {2}", Cliente.Tabela, Cliente.Id, tarefa.Id_Cliente), Cliente.Tabela);
            if (executa != null)
            {
                while (executa.Read())
                {
                    cellFeedbackCliente.Text = executa[Cliente.Razao].ToString();

                }
            }
      
            TableCell cellFeedbackProjeto = new TableCell();
            executa = Auxiliar.RetornaRegistros(String.Format("SELECT * FROM {0} WHERE {1} = {2}", Projeto.Tabela, Projeto.Id, tarefa.Id_projeto), Projeto.Tabela);
            if (executa != null)
            {
                while (executa.Read())
                {
                    cellFeedbackProjeto.Text = executa[Projeto.Nome].ToString();

                }
            }
            TableCell cellFeedbackTarefa = new TableCell();
            cellFeedbackTarefa.Text = tarefa.Nome_tarefa;
            TableCell cellFeedback = new TableCell();
            cellFeedback.Text = txtFeedback.Text;
            TableCell cellFeedbackRemover = new TableCell();
            Button btnRemover = new Button();
            btnRemover.ID = "tarefa" + tarefa.Id_tarefa;
            rowFeedback.Controls.Add(cellFeedbackCliente);
            rowFeedback.Controls.Add(cellFeedbackProjeto);
            rowFeedback.Controls.Add(cellFeedbackTarefa);
            rowFeedback.Controls.Add(cellFeedback);
            tblAdicionaFeedbacks.Controls.Add(rowFeedback);


          //  Session["Feedbacks"] = tblAdicionaFeedbacks;
         //   pnlFeedbacks.Controls.Add(tblAdicionaFeedbacks);
          //  tblViewFeedbacks = tblAdicionaFeedbacks;
                }
                pnlFeedbacks.Controls.Add(tblAdicionaFeedbacks);
            }

            TabelaAdicionar();

            CalculaStatusTarefa();
        }
        protected void ddlCliente_SelectedIndexChanged(object sender, EventArgs e)
        {
            CarregaProjeto();
            
        }
        protected void ddlProjeto_SelectedIndexChanged(object sender, EventArgs e)
        {
            CarregaTarefa();
        }
        protected void btn_Click(object sender, EventArgs e)
        {
            CalculaStatusTarefa();
         //   UpdateTarefa();
        }
        enum Status
        {
            Espera = 1,
            Iniciado = 2,
            EmDia= 3,
            Atrasado = 4,
            Adiantado = 5,
            Finalizado = 6

        }
        public void CalculaStatusProjeto(double cargaHorariaUtilizadaTarefa, double cargaHorariaTarefa, double porcTarefaRealizada, double porcAnterior, int idProjeto)
        {
            try
            {
                double cargaHoraria = 0.0;
                double cargaHorariaUtilizada = 0.0;
                double porcAtual = 0.0;
            
                SqlDataReader executa = Auxiliar.RetornaRegistros(String.Format("SELECT * FROM {0} WHERE {1} = {2}", Projeto.Tabela, Projeto.Id, idProjeto), Projeto.Tabela);
                if (executa != null)
                {
                    while (executa.Read())
                    {
                        //ok
                        cargaHoraria = Math.Round(Convert.ToDouble(executa[Projeto.CargaHoraria]) * 60.0,2);
                        //ok
                        cargaHorariaUtilizada = Math.Round(Convert.ToDouble(executa[Projeto.CargaHorariaUtilizada]) * 60.0 + cargaHorariaUtilizadaTarefa,2);
                        //ok
                        porcAtual = Math.Round(Convert.ToDouble(executa[Projeto.Porcentagem]),2);
                    }
                }
                //form
                double porcTarefaProjeto = (cargaHorariaTarefa / cargaHoraria) * 100;
                double porcTarefaProjetoRealizada = Math.Round((porcTarefaProjeto * porcTarefaRealizada) / 100,2);
                double porcTarefaProjetoRealizadaAnterior = Math.Round((porcTarefaProjeto * porcAnterior) / 100, 2);

                porcAtual += porcTarefaProjetoRealizada;
                porcAtual -= porcTarefaProjetoRealizadaAnterior;
                double porcNecessarria = (100 / cargaHoraria) * cargaHorariaUtilizada <= 100.0 ? (100 / cargaHoraria) * cargaHorariaUtilizada : 100.0;



                int status;
                if (porcNecessarria > porcAtual)

                    status = (int)Enums.Status.Atrasado;

                else
                    if (Convert.ToInt32(porcNecessarria) < Convert.ToInt32(porcAtual))

                        status = (int)Enums.Status.Adiantado;

                    else
                        status = (int)Enums.Status.EmDia;


                Auxiliar.ExecutaComando(String.Format("UPDATE {0} SET {1} = {2}, {3} = {4}, {5} = {6} WHERE {7} = {8}", Projeto.Tabela, Projeto.Status, status, Projeto.Porcentagem, Math.Round(porcAtual,2).ToString().Replace(",", "."), Projeto.CargaHorariaUtilizada, (cargaHorariaUtilizada / 60), Projeto.Id, idProjeto));
                Response.Redirect("/Paginas/WFVisualizaProjeto.aspx", false);
            }
            catch (Exception ex)
            {

                throw;
            }
            finally
            {
                Auxiliar.FecharConexao();
            }

        }
        public void CalculaStatusTarefa()
        {
            try
            {
                if (Session["Tarefas"] != null)
                {

                    tarefas = (List<Tarefa>)Session["Tarefas"];
                }
                foreach (Tarefa tarefa in tarefas)
                {
                    Logar logar = new Logar();
                    if (Session["Usuario"] != null)
                    {
                        logar = (Logar)Session["Usuario"];
                    }
                    if (string.IsNullOrEmpty(logar.Id))
                    {
                        logar.Id = "2";
                    }
                                      Auxiliar.ExecutaComando(String.Format("UPDATE TAREFAS SET ID_STATUS = {0}, PORC_CONCLUSAO = {1}, ID_FUNC = {2}, CARG_HOR_UTILIZ = {3} WHERE ID_TAREFA = {4}", tarefa.Id_status, Math.Round(tarefa.Porc_conclusao).ToString().Replace(",", "."), logar.Id,  (tarefa.Carg_hor_utiliz_tarefa), tarefa.Id_tarefa));
                    Auxiliar.ExecutaComando(String.Format("INSERT INTO {0} ({1},{2},{3},{4}) VALUES ({5},{6},'{7}','{8}')",
                        Feedback.Tabela, Feedback.IdTarefa, Feedback.IdFunc, Feedback.Descricao, Feedback.Positivo,
                        tarefa.Id_tarefa, logar.Id, tarefa.Feedback, tarefa.FeedbackPositivoNegativo));
                    
                    CalculaStatusProjeto(tarefa.Carg_hor_utiliz_tarefa * 60, tarefa.Carga_horaria_Tarefa * 60, tarefa.Porc_conclusao, tarefa.PorcentagemAnterior, tarefa.Id_projeto);
                }

              
                Response.Redirect(String.Format("WFVisualizarTarefas.aspx?ID_PROJETO={0}&ID_TAREFA=0&ID_FUNC=0", ddlProjeto.SelectedValue), false);


            }
            catch (Exception ex)
            {

                throw;
            }
            finally
            {
                Auxiliar.FecharConexao();
            }

        }
        public void UpdateTarefa()
        {

            try
            {



                Response.Redirect(String.Format("WFVisualizarTarefas.aspx?ID_PROJETO={0}&ID_TAREFA=0&ID_FUNC=0", ddlProjeto.SelectedValue), false);


            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        protected void ddlTarefa_SelectedIndexChanged(object sender, EventArgs e)
        {
           
        }

        protected void ddlHoraSaida_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

        protected void ddlMinutoSaida_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }

        protected void ddlHoraEntrada_SelectedIndexChanged(object sender, EventArgs e)
        {
          
        }

        protected void ddlMinutoEntrada_SelectedIndexChanged(object sender, EventArgs e)
        {
        }


    }
}